package kMeans.main;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;

import kMeans.core.PadraoTreinamento;

public class ManipulacaoArquivos {

	/**
	 * @return PadraoTreinamento [] - array com o padrao de treinamento.
	 */
	public PadraoTreinamento[] getTrainingData(String pNomeArquivo) {
		
		PadraoTreinamento [] aTreinamento = new PadraoTreinamento[300];
		
		//Dados de treinamento.
		try {
	        BufferedReader in = new BufferedReader(new FileReader(pNomeArquivo));
	        String str;
	        int i = 0;
	        while ((str = in.readLine()) != null) {
	            String[] splitTreinamento = str.split("\t");
	            
	            PadraoTreinamento padraoTreinamento = new PadraoTreinamento(Integer.parseInt(splitTreinamento[0]));
	            ArrayList<Double> valoresPadrao = new ArrayList<Double>();
	            
	            for (int j = 1; j < splitTreinamento.length-1; j++) {
					valoresPadrao.add(Double.parseDouble(splitTreinamento[j]));
				}
	            
	            padraoTreinamento.setValoresPadrao(valoresPadrao);
	            padraoTreinamento.setClasse(Integer.parseInt(splitTreinamento[splitTreinamento.length-1]));
	            aTreinamento[i] = padraoTreinamento;
	            i++;
	        }
	        in.close();
	    } catch (IOException e) {
	    	System.err.println("Unable to read from file!");
	    }
	    return aTreinamento;
	}

	public PadraoTreinamento[] getTestData(String pNomeArquivo) {
		
		PadraoTreinamento [] aTest = new PadraoTreinamento[300];
		
		//Dados de teste.
		try {
	        BufferedReader in = new BufferedReader(new FileReader(pNomeArquivo));
	        String str;
	        int i = 0;
	        while ((str = in.readLine()) != null) {
	            String[] splitTreinamento = str.split("\t");
	            
	            PadraoTreinamento padraoTreinamento = new PadraoTreinamento(Integer.parseInt(splitTreinamento[0]));
	            ArrayList<Double> valoresPadrao = new ArrayList<Double>();
	            
	            for (int j = 1; j < splitTreinamento.length-1; j++) {
					valoresPadrao.add(Double.parseDouble(splitTreinamento[j]));
				}
	            
	            padraoTreinamento.setValoresPadrao(valoresPadrao);
	            padraoTreinamento.setClasse(Integer.parseInt(splitTreinamento[splitTreinamento.length-1]));
	            aTest[i] = padraoTreinamento;
	            i++;
	        }
	        in.close();
	    } catch (IOException e) {
	    	System.err.println("Unable to read from file!");
	    }
	    return aTest;
	}
}

